package controller;

import core.BlogException;
import core.Clanek;
import java.io.Serializable;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import model.ClanekModel;

/**
 * Backing bean pro Clanky
 * @author vojta
 */
@ManagedBean(name="ClankyBean")
@SessionScoped
public class ClankyBean extends Clanek implements Serializable{
                  
    private String fullText;
    List<Clanek> clanky;
    Clanek aktualniClanek;

    public String getFullText() {
        return fullText;
    }

    public void setFullText(String fullText) {
        this.fullText = fullText;
    }   
    
    public Clanek getAktualniClanek() {
        return aktualniClanek;        
    }

    public void setAktualniClanek(Clanek aktualniClanek) {
        this.aktualniClanek = aktualniClanek;
    }
    
    public List<Clanek> getClanky() {
        return clanky;
    }

    public void setClanky(List<Clanek> clanky) {
        this.clanky = clanky;
    }
            
    /**
     * Vypise clanky podle zadane kategorie
     * @param kat - kategorie
     * @param a - kam se bude presmerovavat
     * @return String 
     */
    public String listClankyByKategorie(int kat, String a){
        try {
            ClanekModel model = new ClanekModel();   
            clanky = model.getClankyVKategorii(kat);        
            
            return a;
        } catch (BlogException ex) {
            FacesContext.getCurrentInstance().addMessage("pridatU:heslo1", new FacesMessage("Chyba: Nastala chyba pri vyberu clanku!"));
            return a;
        }
    }
    
    /**
     * Zobrazi jeden konkretni clanek podle jeho id
     * @param id - id clanku na zobrazeni
     * @return 
     */
    public String showClanek(int id){
        try {
            ClanekModel model = new ClanekModel();   
            
            Clanek c = new Clanek();
            c.setId(id);
            
            aktualniClanek = model.getClanek(c);

            return "showClanek";
        } catch (BlogException ex) {
            ex.printStackTrace();
            FacesContext.getCurrentInstance().addMessage("pridatU:heslo1", new FacesMessage("Chyba: Nastala chyba pri zobrazovani clanku!"));
            return "showClanek";
        }
    }
    
    /**
     * Zvysi hodnoceni u clanku
     * @return 
     */
    public String zvysitHodnoceni() {
        try {
            ClanekModel model = new ClanekModel();
            model.zvysHodnoceniClanku(aktualniClanek);
            
            aktualniClanek = model.getClanek(aktualniClanek);
            
            return "showClanek";
        } catch (BlogException ex) {
            FacesContext.getCurrentInstance().addMessage("pridatU:heslo1", new FacesMessage("Chyba: Nastala chyba pri zvysovani hodnoce!"));
            return "showClanek";
        }
    }
    
    /**
     * Snizi hodnoceni u clanku
     * @return 
     */
    public String snizitHodnoceni() {
        try {
            ClanekModel model = new ClanekModel();
            model.snizHodnoceniClanku(aktualniClanek);
            
            aktualniClanek = model.getClanek(aktualniClanek);
            
            return "showClanek";
        } catch (BlogException ex) {
            FacesContext.getCurrentInstance().addMessage("pridatU:heslo1", new FacesMessage("Chyba: Nastala chyba pri snizovani hodnoce!"));
            return "showClanek";
        }
    }
    
    /**
     * Odstrani clanek
     * @param id - id clanku na odstraneni
     * @return 
     */
    public String removeClanek(int id) {
        try {
            ClanekModel model = new ClanekModel();
            
            Clanek c = new Clanek();
            c.setId(id);
            
            model.removeClanek(c);
            
            FacesContext.getCurrentInstance().addMessage("pridatU:heslo1", new FacesMessage("Uspech: Clanek byl uspesne odstranen."));
            clanky = null;
            return "spravovatClanky";
        } catch (BlogException ex) {
            FacesContext.getCurrentInstance().addMessage("pridatU:heslo1", new FacesMessage("Chyba: Nastala chyba pri odstranovani clanku!"));
            return "spravovatClanky";
        }
        
    }
    
    /**
     * Prida novy clanek
     * @return 
     */
    public String addClanek() {
        try {
            ClanekModel model = new ClanekModel();
            
            Clanek c = new Clanek();
            
            c.setKategorie(this.getKategorie());
            c.setNavstevnost(0);
            c.setNazev(this.getNazev());
            c.setText(this.getText());
            
            model.addClanek(c);
            
            clearVariables();
            
            FacesContext.getCurrentInstance().addMessage("pridatU:heslo1", new FacesMessage("Uspech: Clanek byl uspesne pridan!"));
            return "spravovatClanky";
        } catch (BlogException ex) {
            FacesContext.getCurrentInstance().addMessage("pridatU:heslo1", new FacesMessage("Chyba: Nastala chyba pri pridavani clanku!"));
            return "spravovatClanky";
        }                
    }
    
    /**
     * Ziska a presmeruje na stranku pro zmenu clanku
     * @param id - id clanku na zmenu
     * @return 
     */
    public String editClanekRedir(int id) {
        try {
            ClanekModel model = new ClanekModel();
            
            Clanek c = new Clanek();
            c.setId(id);
            
            aktualniClanek = model.getClanek(c);
            
            return "upravitClanek";
        } catch (BlogException ex) {
            FacesContext.getCurrentInstance().addMessage("pridatU:heslo1", new FacesMessage("Chyba: Nastala chyba pri editaci clanku!"));
            return "spravovatClanky";
        }
    }
    
    /**
     * Zmeni clanek
     * @return 
     */
    public String editClanek() {
        try {
            ClanekModel model = new ClanekModel();
            
            System.out.println("Text: " + aktualniClanek.getText());
            
            Clanek c = new Clanek();
            c.setId(aktualniClanek.getId());
            c.setNazev(aktualniClanek.getNazev());
            c.setText(aktualniClanek.getText());
            c.setKategorie(aktualniClanek.getKategorie());
            
            System.out.println("********************* ID: " + this.getId() + " ------------");
            
            model.editClanek(c);
                        
            FacesContext.getCurrentInstance().addMessage("pridatU:heslo1", new FacesMessage("Úspěch: Článek byl úspěšně změněn."));
            return "spravovatClanky";
        } catch (BlogException ex) {
            FacesContext.getCurrentInstance().addMessage("pridatU:heslo1", new FacesMessage("Chyba: Nastala chyba pri editaci clanku!"));
            return "spravovatClanky";
        }
    }
    
    /**
     * Zvysi navstevnost clanku o 1
     * @param a 
     */
    public void zvysNavstevnost(Clanek a) {
        try {
            ClanekModel model = new ClanekModel();
            model.pridejPrecteniClanku(a);
            
        } catch (BlogException ex) {
            Logger.getLogger(ClankyBean.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    /**
     * Ziska x nejnovejsich clanku
     * @param pocet - pocet clanku, ktere se maji ziskat
     * @return 
     */
    public List<Clanek> ziskatNejnovejsiClanky(int pocet) {
        try {
            ClanekModel model = new ClanekModel();
            return model.getNejnovejsiClanky(pocet);
            
        } catch (BlogException ex) {
            System.out.println("Bu,");
        }
        return null;
    }
    
    /**
     * Fulltextove vyhledavani v textu clanku
     * @return 
     */
    public String ziskatFullTextClanky() {
        try {
            ClanekModel model = new ClanekModel();
            clanky = model.getFulltextClanky(fullText);
             
            return "hledej";
        } catch (BlogException ex) {
            System.out.println("Bum");
        }
        return null;
    }
    
    /**
     * Promazne promenne teto Beany
     */
    private void clearVariables() {
        this.setAktualniClanek(null);
        this.setClanky(null);
        this.setId(0);
        this.setKategorie(0);
        this.setNavstevnost(0);
        this.setNazev(null);
        this.setObrazky(null);
        this.setText(null);
        this.setLibi(0);
        this.setNelibi(0);
    }
}
 